<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once(APPPATH."models/materiamodel.php");

class materiadao extends CI_Model {
	
	function __construct(){		
		parent::__construct();		
	}
	
	public function excluir($id){
		try{
			$exec = $this->db->query("call excluirMateriaById(".$id.")") or die("Erro: " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$d = $exec->row();
				$erro = (int)$d->erro;
				$this->db->close();
				if($erro == 0){
					return true;
				}
				$this->db->close();
				return false;
			}
			$this->db->close();
			return false;
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch (Exception $a){
	
			}
		}
		return false;
	}
	
	public function buscarMateria($busca){
		try {
			$exec = $this->db->query("call getMateriasBusca('".$busca."')") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaMateria = array();
				foreach($exec->result() as $dados){
					$m = new MateriaModel();
					$m->setIdEnsino($dados->idensino);
					$m->setIdMateria($dados->idmateria);
					$m->setMateria($dados->materia);
					$m->setStrEnsino($dados->ensino);
					array_push($listaMateria, $m);
				}
				$this->db->close();
				return $listaMateria;
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
		}
		return null;
	}
	
	public function getMateriasProfessor($idProfessor){
		try{
			$exec = $this->db->query("call getMateriasProfessor(".$idProfessor.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaMaterias = array();
				foreach($exec->result() as $d){
					$m = new MateriaModel();
					$m->setIdMateria($d->idmateria);
					$m->setMateria($d->materia);
					array_push($listaMaterias, $m);
				}
				$this->db->close();
				return $listaMaterias;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $a){
			}
		}
		return null;
	}
	
	public function setMateriaTurma($selecionado, $remover, $idTurma){
		try{
			if(is_array($remover)){
				foreach($remover as $r){
					$this->db->query("call removerRelacaoTurmaSerie(".$r.", ".$idTurma.")") or die("Erro : " . $this->db->_error_message());
					$this->db->close();
				}
			} else {
				return false;
			}
			if(is_array($selecionado)){
				foreach($selecionado as $s){
					$this->db->query("call inserirMateriaTurma(".$s.", ".$idTurma.")") or die("Erro : " . $this->db->_error_message());
					$this->db->close();
				}
			} else {
				return false;
			}
			return true;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $e){
			}
		}
		return false;
	}
	public function getTurmaMateriaById($id){
		try {
			$exec = $this->db->query("call getTurmaMateriaById(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaMateria = array();
				foreach($exec->result() as $d){
					if(isset($d->idMateria)){
						$m = new MateriaModel();
						$m->setIdMateria($d->idMateria);
						$m->setMateria($d->materia);
						array_push($listaMateria, $m);
					}
				}
				$this->db->close();
				return $listaMateria;
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
		}
		return null;
	}
	
	/**
	 * 
	 * @param unknown_type $ids
	 * @param unknown_type $remover
	 * @param unknown_type $idProfessor
	 * @param unknown_type $idTurma
	 * @return boolean|multitype:
	 */
	public function setProfessorMateria($ids, $remover, $idProfessor, $idTurma){
		
		if($remover != "" && is_array($remover) && count($remover) > 0){
			foreach($remover as $r){
				$this->db->query("call limparMateriaProfessor(".$idTurma.",".$idProfessor.", ".$r.")") or die("Erro : " . $this->db->_error_message());
				$this->db->close();
			}
		}
		if(is_array($ids)){
			$idJaExiste = array();
			$flag = false;
			foreach ($ids as $id){
				$ret = $this->db->query("call inserirProfessorMateria(".$idTurma.",".$idProfessor.", ".$id.")");
				if($ret->num_rows() > 0){
					$d = $ret->row();
					$erro = (int)$d->erro;
					if($erro == -2){
						$flag = true;
						array_push($idJaExiste, $id);
					}
				}
				$this->db->close();
			}
			//$this->db->close();
			if(!$flag){
				return true;
			} else {
				return $idJaExiste;
			}
		} 
		
		else {
			return false;
		}
	}
	
	/**
	 * 
	 * @param unknown_type $id
	 * @return multitype:|NULL
	 */
	public function getMateriaByEnsino($id){
		try {
			$exec = $this->db->query("call getMateriasByEnsino(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaMateria = array();
				foreach($exec->result() as $dados){
					$m = new MateriaModel();
					$m->setIdMateria($dados->idmateria);
					$m->setMateria($dados->materia);
					array_push($listaMateria, $m);
				}
				$this->db->close();
				return $listaMateria;
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
		}
		return null;
	}
	
	public function getMateriaById($id){
		try {
			$exec = $this->db->query("call getMateriaById(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$m = new MateriaModel();
				$m->setIdEnsino($dados->idensino);
				$m->setIdMateria($dados->idmateria);
				$m->setMateria($dados->materia);
				$this->db->close();
				return $m;
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
				
			}
		}
		return null;
	}
	
	/**
	 * 
	 * @param unknown_type $idMateria
	 * @param unknown_type $idEnsino
	 * @param unknown_type $materia
	 * @return number|NULL
	 */
	public function inserirEditar($idMateria, $idEnsino, $materia){
		try {
			$exec = $this->db->query("call inserirEditarMateria(".$idMateria.", ".$idEnsino.", '".$materia."')") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$tipo = $dados->tipo;
				$erro = (int)$dados->erro;
				$this->db->close();
				if($tipo == "update"){
					if($erro == 0){
						return 0; //update com sucesso
					}
					return 1; // não encontrado para editar
				} else {
					if($erro > 0){
						return 2; //inserido com sucesso;
					}
					return 3;//desconhecido
				}
			}			
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
				
			}
		}
		return null;
	}
	
	/**
	 * 
	 * @return multitype:|NULL
	 */
	public function getListaMateria(){
		try {
			$exec = $this->db->query("call getMaterias()") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaMateria = array();
				foreach($exec->result() as $dados){
					$m = new MateriaModel();
					$m->setIdEnsino($dados->idensino);
					$m->setIdMateria($dados->idmateria);
					$m->setMateria($dados->materia);
					$m->setStrEnsino($dados->ensino);
					array_push($listaMateria, $m);
				}
				$this->db->close();
				return $listaMateria;
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
		}
		return null;
	}
	
	
}
